package com.zmn.oms.services.interfaces.work;


import com.zmn.oms.model.entity.work.OrderWork;

import java.util.Map;

/**
 * 类描述：工单金额
 *
 * @author heciqi
 * @date 2018/11/7 14:37
 */
public interface OrderWorkAmountService {

    /**
     * 修改预付款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updatePrepayAmount(OrderWork orderWork);
    /**
     * 支付定金
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updatePrepayAmountAndMasterAmountPay(OrderWork orderWork);

    /**
     * 支付预付款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updatePrepayAmountPay(OrderWork orderWork);

    /**
     * 修改定金
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateDepositAmount(OrderWork orderWork);

    /**
     * 支付定金
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateDepositAmountPay(OrderWork orderWork);

    /**
     * 修改工程师收款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateMasterAmount(OrderWork orderWork);

    /**
     * 支付工程师收款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateMasterAmountPay(OrderWork orderWork);

    /**
     * 修改优惠金额
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateDiscountAmount(OrderWork orderWork);

    /**
     * 修改退款金额
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateRefundAmount(OrderWork orderWork);

    /**
     * 修改配件金额
     *
     * @param orderWork
     * @return
     */
    Integer updatePartAmount(OrderWork orderWork);

    /**
     * 修改工单金额 （完成之前）
     *
     * @param orderWork
     */
    void updateAmount(OrderWork orderWork);

    /**
     * 修改渠道费
     *
     * @param orderWork
     */
    void updateChannelAmount(OrderWork orderWork);

    /**
     * 修改支付状态
     *
     * @param orderWork
     */
    void updatePayStatus(OrderWork orderWork);

    /**
     * 渠道二次支付
     *
     * @param updateAmount
     */
    void updateSecondChannelPay(OrderWork updateAmount);

    /**
     * 修改支付状态 （更改渠道预付款）订单支付状态 工程师收款支付状态 渠道预付款支付状态
     *
     * @param updateAmount
     */
    void updatePayStatusChannelPrepay(OrderWork updateAmount);

    /**
     * 删除原价
     *
     * @param orderId
     * @param workId
     */
    void deleteOriginalAmount(Long orderId, Long workId);

    /**
     * 清空价格
     *
     * @param updateAmount
     * @param fields       需要更新的属性 totalAmount、depositAmount
     */
    void updateCleanAmount(OrderWork updateAmount, Map<String, Boolean> fields);

    /**
     * 支付之后修改
     * @param updateOrderWork
     */
    void updateOriginalAmountAfterPayment(OrderWork updateOrderWork);

    /**
     * 更新退款
     * @param orderWork
     */
	void updateRefund(OrderWork orderWork);

    /**
     * 更新原价，应收和定金
     * @param orderWork
     */
	void updateOriginalAndTotalAndDepositAmount(OrderWork orderWork);

    void hotfixUpdateRefundAmount(OrderWork upOrderWork);

    /**
     * 更新支付优惠金额
     * @param orderWork
     */
    void updatePayDiscountAmount(OrderWork orderWork);
}
